# 2024.06.21——牛客网在线编程
# Python入门——列表——16题
'''

# 题目1：发送offer——入门
# 描述
# 某公司在面试结束后，创建了一个依次包含字符串 'Allen' 和 'Tom' 的列表offer_list，作为通过面试的名单。
# 请你依次对列表中的名字发送类似 'Allen, you have passed our interview and will soon become a member of our company.' 的句子。
# 但由于Tom有了其他的选择，没有确认这个offer，HR选择了正好能够确认这个offer的Andy，所以请把列表offer_list中 'Tom' 的名字换成 'Andy' ，
# 再依次发送类似 'Andy, welcome to join us!' 的句子。
# 输入描述：
# 无
# 输出描述：
# 按题目描述进行输出即可。
# Allen, you have passed our interview and will soon become a member of our company.
# Tom, you have passed our interview and will soon become a member of our company.
# Allen, welcome to join us!
# Andy, welcome to join us!

offer_list = ['Allen', 'Tom']
print(f'{offer_list[0]}, you have passed our interview and will soon become a member of our company.')
print(f'{offer_list[1]}, you have passed our interview and will soon become a member of our company.')
offer_list[1] = 'Andy'
print(f'{offer_list[0]}, welcome to join us!')
print(f'{offer_list[1]}, welcome to join us!')

# 题目2：生成列表——简单
# 描述
# 一串连续的数据用什么记录最合适，牛牛认为在Python中非列表（list）莫属了。现输入牛牛朋友们的名字，请使用list函数与split函数将它们封装成列表，再整个输出列表。
# 输入描述：
# 输入一串字符串，它们之间通过空格间隔开。
# 输出描述：
# 输出封装后的列表。
# 示例1
# 输入：
# NiuNiu NiuMei NiuNeng
# 输出：
# ['NiuNiu', 'NiuMei', 'NiuNeng']

name = input()
name = name.split()     # split()字符串分割方法——返回分割后的字符串列表
print(name)

# 题目3：生成数字列表——简单
# 描述
# 牛牛在牛客网系统录入了一连串数字，数字之间依靠逗号隔开，你能帮助他将这些数字存储在列表中吗，列表元素以int的形式。
# 输入描述：
# 输入一行整数，数字之间以空格间隔。
# 输出描述：
# 输出这些数字组成的完整列表。
# 示例1
# 输入：
# 1 2 3 4 5
# 输出：
# [1, 2, 3, 4, 5]

num = input()
num = num.split()
for i in range(0, len(num)):
    num[i] = int(num[i])
print(num)

# 题目4：列表的长度——简单
# 描述
# 牛牛学会了使用list函数与split函数将输入的连续字符串封装成列表，你能够帮他使用len函数统计一些公输入了多少字符串，列表中有多少元素吗？
# 输入描述：
# 输入一行多个字符串，字符串之间通过空格间隔。
# 输出描述：
# 输出列表的长度。
# 示例1
# 输入：
# NiuNiu NiuMei NiuNeng
# 输出：
# 3

str = input().split()
print(len(str))

# 题目5：增加派对名单（一）——中等
# 描述
# 为庆祝驼瑞驰在牛爱网找到合适的对象，驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单，
# 在检查的时候发现少了他最好的朋友“Allen”的名字，你能使用append函数将这个名字加到列表末尾吗？添加完成请输出完整列表。
# 输入描述：
# 输入多个连续的字符串表示名字，以空格间隔。
# 输出描述：
# 输出添加完Allen后的完整列表。
# 示例1
# 输入：
# Niuniu Niumei Lucy Niuneng
# 输出：
# ['Niuniu', 'Niumei', 'Lucy', 'Niuneng', 'Allen']

name = input().split()
name.append('Allen')    # append()方法——在列表末尾添加元素
print(name)

# 题目6： 增加派对名单（二）——中等
# 描述
# 为庆祝驼瑞驰在牛爱网找到合适的对象，驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单，
# 在检查的时候发现少了他最好的朋友“Allen”的名字，
# 因为是最好的朋友，他想让这个名字出现在邀请列表的最前面，你能用insert函数帮他实现吗？请输出插入后的完整列表。
# 输入描述：
# 输入多个连续的字符串表示名字，用空格间隔。
# 输出描述：
# 输出插入名字后的完整列表。
# 示例1
# 输入：
# Niuniu Niumei Lucy
# 输出：
# ['Allen', 'Niuniu', 'Niumei', 'Lucy']

name = input().split()
name.insert(0, 'Allen')     # insert()方法——在列表指定下标位置添加元素
print(name)

# 题目7：删除简历——中等
# 描述
# 牛牛在各大互联网公司投入了简历，公司的名字通过字符串的形式在一行中输入，
# 请用列表记录。现在牛牛已经确定了第一所公司的HR表露了不录用他的态度，
# 请你使用del函数帮助牛牛从列表中删除第一个元素，然后输出列表。
# 输入描述：
# 以字符串的形式输入公司名字，字符串之间以空格间隔。
# 输出描述：
# 输出删除第一个元素后的完整列表。
# 示例1
# 输入：
# Baidu Meituan Nowcoder Huawei apple
# 输出：
# ['Meituan', 'Nowcoder', 'Huawei', 'apple']

cmp = input().split()
cmp.pop(0)  # pop()方法——删除列表指定下标处的元素
print(cmp)

# 题目8：删除好友——中等
# 描述
# 牛妹有一个坏习惯，一旦与朋友吵架了，她就要删除好友。
# 现在输入一个行多个字符串表示牛妹的朋友，请把它们封装成列表，
# 然后再输入与牛妹吵架的朋友的名字，请使用remove函数帮她从列表中删除这个好友，然后输出完整列表。
# 输入描述：
# 第一行输入多个字符串表示朋友的名字，以空格间隔。
# 第二行输入吵架的朋友的名字，必定是第一行中出现的名字。
# 输出描述：
# 输出删除好友后的完整列表。
# 示例1
# 输入：
# NiuNiu Niukele NiuNeng
# NiuNiu
# 输出：
# ['Niukele', 'NiuNeng']

name = input().split()
name.remove(input())    # remove()方法——删除列表中指定元素
print(name)

# 题目9：淘汰排名最后的学生——中等
# 描述
# 某实验班实行末位淘汰制，期中考试需要淘汰末三位同学。
# 现输入一行多个字符串表示按分数排名的该班级同学的名字（数量一定不少于三个），
# 请你使用list将其封装为列表，然后使用三次pop函数，去掉末三位同学的名字，最后输出淘汰后的班级名字列表。
# 输入描述：
# 输入一行多个字符串表示同学名字，最少不少于3个名字，以空格间隔。
# 输出描述：
# 输出删除末三位后的完整列表。
# 示例1
# 输入：
# NiuNiu Tom Tony Lucy
# 输出：
# ['NiuNiu']

student = input().split()
for i in range(0, 3):
    student.pop()
print(student)

# 题目10：有序的列表——中等
# 描述
# 创建一个依次包含字符串'P'、'y'、't'、'h'、'o'和'n'的列表my_list，
# 先使用sorted函数对列表my_list进行临时排序，
# 第一行输出排序后的完整列表，第二行输出原始的列表。
# 再使用sort函数对列表my_list进行降序排序，第三行输出排序后完整的列表。
# 输入描述：
# 无
# 输出描述：
# 第一行输出临时排序后的列表；
# 第二行输出原始的列表；
# 第三行输出完成降序排序后的列表。

str = 'P y t h o n'
str = str.split()
my_list = str
print(sorted(my_list))  # sorted()函数——排序所有可迭代对象
print(str)
my_list.sort(reverse=True)  # sort()方法——排序列表
print(my_list)
# sorted 语法：
# sorted(iterable, key=None, reverse=False)
# iterable -- 可迭代对象。
# key -- 主要是用来进行比较的元素，只有一个参数，具体的函数的参数就是取自于可迭代对象中，指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则，reverse = True 降序 ， reverse = False 升序（默认）。
# key与reverse可有可无，可以默认为None，reverse默认为False
# 返回重新排序的列表
# sort()方法语法：
# list.sort(cmp=None, key=None, reverse=False)
# cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
# key -- 主要是用来进行比较的元素，只有一个参数，具体的函数的参数就是取自于可迭代对象中，指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则，reverse = True 降序， reverse = False 升序（默认）。
# 该方法没有返回值，但是会对列表的对象进行排序。

# 题目11：牛牛的反转列表——简单
# 描述
# 牛牛有一个列表记录了各个朋友的喜欢的数字，num = [3, 5, 9, 0, 1, 9, 0, 3]，请你帮他创建列表，然后使用reverse函数将列表反转输出。
# 输入描述：
# 无
# 输出描述：
# 第一行输出创建好的原始的列表，第二行输出反转后的列表。

num = [3, 5, 9, 0, 1, 9, 0, 3]
num.reverse()   # reverse()方法——反转列表中的元素
print(num)

# 题目12：朋友们的喜好——简单
# 描述
# 牛牛有一个name = ['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'] 记录了他最好的朋友们的名字，
# 请创建一个二维列表friends，使用append函数将name添加到friends的第一行。
# 假如Niumei最喜欢吃pizza，最喜欢数字3，YOLO最喜欢吃fish， 最喜欢数字6，Niu Ke Le最喜欢吃potato，最喜欢数字0，Mona最喜欢吃beef，最喜欢数字3。
# 请再次创建一个列表food依次记录朋友们最喜欢吃的食物，并将创建好的列表使用append函数添加到friends的第二行；
# 然后再创建一个列表number依次记录朋友们最喜欢的颜色，并将创建好的列表使用append函数添加到friends的第三行。
# 这样friends就是一个二维list，使用print函数直接打印这个二维list。
# 输入描述：
# 无
# 输出描述：
# [['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'], ['pizza', 'fish', 'potato', 'beef'], [3, 6, 0, 3]]

name = ['Niumei', 'YOLO', 'Niu Ke Le', 'Mona']
friends = [[], [], []]
friends[0] = name
food = ['pizza', 'fish', 'potato', 'beef']
friends[1] = food
number = [3, 6, 0, 3]
friends[2] = number
print(friends)

# 题目13：密码游戏——中等
# 描述
# 牛牛和牛妹一起玩密码游戏，牛牛作为发送方会发送一个4位数的整数给牛妹，牛妹接收后将对密码进行破解。
# 破解方案如下：每位数字都要加上3再除以9的余数代替该位数字，然后将第1位和第3位数字交换，第2位和第4位数字交换。
# 请输出牛妹破解后的密码。
# 输入描述：
# 输入一个四位数的整数。
# 输出描述：
# 输出破解后的密码，以四位数的形式。
# 示例1
# 输入：
# 1234
# 输出：
# 6745
# 备注：
# 输入不会有前置0，但是输出要保持前置0

num = int(input())
num_list = [1, 2, 3, 4]
i = 3
while num:
    num_list[i] = num % 10
    num //= 10
    i -= 1
for i in range(0, len(num_list)):
    num_list[i] = (num_list[i] + 3) % 9
num_list[0], num_list[2] = num_list[2], num_list[0]
num_list[1], num_list[3] = num_list[3], num_list[1]
num = str(num_list[0])
for i in num_list[1:]:
    num += str(i)
print(num)

# 题目14：用列表实现栈——中等
# 描述
# 栈是一种先进后出的数据结构，类似我们生活中挤电梯，最后进入的肯定是先出来，
# 现我们用Python的列表来模拟栈。假设初始的列表为 stack = [1, 2, 3, 4, 5]，
# 请将其视作栈，使用pop函数弹出末尾两个元素，再使用append函数将输入元素加入到栈中，每次操作完成后都要输出整个列表。
# 输入描述：
# 输入要加入栈中的整数。
# 输出描述：
# 第一行输出第一次出栈后的列表；
# 第二行输出第二次出栈后的列表；
# 第三行输出元素入栈后的列表。
# 示例1
# 输入：
# 1
# 输出：
# [1, 2, 3, 4]
# [1, 2, 3]
# [1, 2, 3, 1]
# 说明：
# 第一次弹出末尾元素5，第二次弹出末尾元素4，第三次加入新增元素1

stack = [1, 2, 3, 4, 5]
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.append(int(input()))
print(stack)

# 题目15： 用列表实现队列——中等
# 描述
# 队列是一种先进先出的数据结构，类似食堂排队打饭，
# 先入队的元素当然要先出队，先请用Python列表模拟队列。
# 现有一列表 queue = [1, 2, 3, 4, 5] 被视作队列，
# 请使用pop函数连续两次取出队首元素，再使用append函数将输入元素添加到队尾，每次操作后都要输出完整的列表。
# 输入描述：
# 输入一个整数表示要添加到队列的元素。
# 输出描述：
# 第一行输出第一次取出队首后的列表；
# 第二行输出第二次取出队首后的列表；
# 第三行输出添加元素到队列后的列表。
# 示例1
# 输入：
# 8
# 复制
# 输出：
# [2, 3, 4, 5]
# [3, 4, 5]
# [3, 4, 5, 8]
# 复制
# 说明：
# 第一次弹出队首元素1，第二次弹出队首元素2，第三次加入数字8到队尾

queue = [1, 2, 3, 4, 5]
queue.pop(0)
print(queue)
queue.pop(0)
print(queue)
queue.append(int(input()))
print(queue)
'''

# 题目16：团队分组——简单
# 描述
# 创建一个列表group_list，其中依次包含字符串 'Tom', 'Allen', 'Jane', 'William', 'Tony' 表示这个小组成员的名字。
# 现有三项任务需要他们去完成，根据不同任务的繁琐度和实际情况需要分别派2人、3人、2人来完成，他们决定通过对列表分片来分配任务。
# 使用print()语句和切片来打印列表group_list的前两个元素表示去做第一个任务的人的名字，
# 再使用print()语句和切片来打印列表group_list的中间三个元素表示去做第二个任务的人的名字，
# 再使用print()语句和切片来打印列表group_list的后两个元素表示去做第三个任务的人的名字。
# 输入描述：
# 无
# 输出描述：
# 按照题意输出
# ['Tom', 'Allen']
# ['Allen', 'Jane', 'William']
# ['William', 'Tony']

group_list = ['Tom', 'Allen', 'Jane', 'William', 'Tony']
print(group_list[0:2])
print(group_list[1:4])
print(group_list[-2:])
